HAL SD I/O operation functions

This section provides information about HAL SD I/O operation functions for STM32 HAL1 to HAL2 migration.

HAL SD transfer blocking transfer (polling)

HAL1

HAL2

HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd,
                                    uint8_t *pData,
                                    uint32_t BlockAdd,
                                    uint32_t NumberOfBlocks,
                                    uint32_t Timeout)
hal_status_t HAL_SD_ReadBlocks(hal_sd_handle_t *hsd,
                               uint8_t *p_data,
                               uint32_t block_addr,
                               uint32_t blocks_nbr,
                               uint32_t timeout_ms)

HAL1

HAL2

HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd,
                                     const uint8_t *pData,
                                     uint32_t BlockAdd,
                                     uint32_t NumberOfBlocks,
                                     uint32_t Timeout)
hal_status_t HAL_SD_WriteBlocks(hal_sd_handle_t *hsd,
                                const uint8_t *p_data,
                                uint32_t block_addr,
                                uint32_t blocks_nbr,
                                uint32_t timeout_ms)

HAL SD transfer non-blocking transfer (Interrupt)

HAL1

HAL2

HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd,
                                        uint8_t *pData,
                                        uint32_t BlockAdd,
                                        uint32_t NumberOfBlocks)
hal_status_t HAL_SD_ReadBlocks_IT(hal_sd_handle_t *hsd,
                                   uint8_t *p_data,
                                   uint32_t block_addr,
                                   uint32_t blocks_nbr)

HAL1

HAL2

HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd,
                                        const uint8_t *pData,
                                        uint32_t BlockAdd,
                                        uint32_t NumberOfBlocks)
hal_status_t HAL_SD_WriteBlocks_IT(hal_sd_handle_t *hsd,
                                   uint8_t *p_data,
                                   uint32_t block_addr,
                                   uint32_t blocks_nbr)

HAL SD transfer non-blocking transfer (DMA)

HAL1

HAL2

HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd,
                                        uint8_t *pData,
                                        uint32_t BlockAdd,
                                        uint32_t NumberOfBlocks)
hal_status_t HAL_SD_ReadBlocks_DMA(hal_sd_handle_t *hsd,
                                   uint8_t *p_data,
                                   uint32_t block_addr,
                                   uint32_t blocks_nbr)

HAL1

HAL2

HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd,
                                         const uint8_t *pData,
                                         uint32_t BlockAdd,
                                         uint32_t NumberOfBlocks)
hal_status_t HAL_SD_WriteBlocks_DMA(hal_sd_handle_t *hsd,
                                    uint8_t *p_data,
                                    uint32_t block_addr,
                                    uint32_t blocks_nbr)

HAL SD multi-buffer DMA

HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_ConfigDMAMultiBuffer(SD_HandleTypeDef *hsd,
                                                uint32_t *pDataBuffer0,
                                                uint32_t *pDataBuffer1,
                                                uint32_t BufferSize)
HAL_StatusTypeDef HAL_SDEx_ReadBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd,
                                                    uint32_t BlockAdd,
                                                    uint32_t NumberOfBlocks)
HAL_StatusTypeDef HAL_SDEx_WriteBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd,
                                                     uint32_t BlockAdd,
                                                     uint32_t NumberOfBlocks)
HAL_StatusTypeDef HAL_SDEx_ChangeDMABuffer(SD_HandleTypeDef *hsd,
                                     HAL_SDEx_DMABuffer_MemoryTypeDef Buffer,
                                     uint32_t *pDataBuffer)

Multi-buffering is available only in some STM32 series. These series are not yet supported in HAL2.


HAL SD linked-list DMA

Important

Linked-list management operations are now unified under the new HAL Q layer. The following tables detail the updated APIs for linked-list handling in HAL SD. For practical guidance, refer to HAL SD linked-list use case.

HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_ReadBlocks(SD_HandleTypeDef *hsd,
                                                    const SD_DMALinkedListTypeDef *pLinkedList,
                                                    uint32_t BlockAdd,
                                                    uint32_t NumberOfBlocks)
hal_status_t HAL_SD_ReadBlocks_LinkedList(hal_sd_handle_t *hsd,
                                          uint32_t block_addr,
                                          uint32_t blocks_nbr,
                                          const hal_q_t *p_q)

HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_WriteBlocks(SD_HandleTypeDef *hsd,
                                                     const SD_DMALinkedListTypeDef *pLinkedList,
                                                     uint32_t BlockAdd,
                                                     uint32_t NumberOfBlocks)
hal_status_t HAL_SD_WriteBlocks_LinkedList(hal_sd_handle_t *hsd,
                                           uint32_t block_addr,
                                           uint32_t blocks_nbr,
                                           const hal_q_t *p_q)

HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_BuildNode(SD_DMALinkNodeTypeDef *pNode,
                                                   SD_DMALinkNodeConfTypeDef *pNodeConf)
hal_status_t HAL_SD_FillNodeConfig(hal_sd_node_t *p_node,
                                   void *p_buffer,
                                   uint32_t size_byte)

Note

The configuration structure is removed; pass configuration parameters directly. Refer to HAL SD node configuration structure.


HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_InsertNode(SD_DMALinkedListTypeDef *pLinkedList,
                                                    SD_DMALinkNodeTypeDef *pPrevNode,
                                                    SD_DMALinkNodeTypeDef *pNewNode)

Removed; use the HAL Q API

HAL_Q_InsertNode(hal_q_t *p_q,
                 hal_sd_node_t *p_prev_node,
                 hal_sd_node_t *p_new_node)

HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_RemoveNode(SD_DMALinkedListTypeDef *pLinkedList,
                                                    SD_DMALinkNodeTypeDef *pNode)

Removed; use the HAL Q API

HAL_Q_RemoveNode(hal_q_t *p_q,
                 hal_sd_node_t *p_node)

HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_LockNode(SD_DMALinkNodeTypeDef *pNode)
HAL_StatusTypeDef HAL_SDEx_DMALinkedList_UnlockNode(SD_DMALinkNodeTypeDef *pNode)
hal_status_t HAL_SD_SetNodeDataBufferState(hal_sd_node_t *p_node,
                                           hal_sd_node_state_t state)

Note

Use this API by passing as state argument : HAL_SD_DATA_BUFFER_NOT_READY to lock the buffer, or HAL_SD_DATA_BUFFER_READY to unlock the buffer.

By locking/unlocking we intend to inform the peripheral that the buffer is currently used in/freed from the application side.


HAL1

HAL2

HAL_StatusTypeDef HAL_SDEx_DMALinkedList_EnableCircularMode(SD_DMALinkedListTypeDef *pLinkedList)
HAL_StatusTypeDef HAL_SDEx_DMALinkedList_DisableCircularMode(SD_DMALinkedListTypeDef *pLinkedList)

Removed; use the HAL Q APIs

hal_status_t HAL_Q_SetCircularLinkQ_Head(hal_q_t *p_q)


hal_status_t HAL_Q_ClearCircularLinkQ(hal_q_t * p_q)